home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_498 / wordsearch / src / interctrl.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  9KB  |  334 lines

  1. #include <exec/types.h>
  2. #include <exec/libraries.h>
  3. #include <math.h>
  4. #include "wsearch.h"
  5. #include "interface.h"
  6. #include <proto/Req.h>
  7.  
  8. extern BOOL LWActive, DispKey;
  9. extern char *file;
  10. char copy[MAXSIZE+1] = "";
  11.  
  12. int LINK=0;
  13.  
  14. void UpdateDisplay()
  15. {
  16.     int i,top,bottom;
  17.     
  18.     if(rot<5)
  19.     {
  20.         top = ReadLocation(py,DPWin->Height/fontheight-3,yp.VertPot);
  21.         bottom = top + DPWin->Height / fontheight;
  22.         if(bottom>py) bottom = py;
  23.     }
  24.     else
  25.     {
  26.         top = ReadLocation(px,DPWin->Height/fontheight-3,yp.VertPot);
  27.         bottom = top + DPWin->Height / fontheight;
  28.         if(bottom>px) bottom = px;
  29.     }
  30.     if(bottom-top>=MAXROWS) bottom = top+MAXROWS-1;
  31.     for(i=top;i<=bottom;i++)
  32.         IText[i-top].IText = &Display(i,0);    
  33.     for(i=bottom+1-top;i<MAXROWS;i++)
  34.         IText[i].IText = " ";
  35.  
  36.     if(rot<5)
  37.               PrintIText(DPRP,IText,
  38.                   -ReadLocation(px,DPWin->Width/fontwidth-3,xp.HorizPot)*fontwidth,0L);
  39.     else
  40.               PrintIText(DPRP,IText,
  41.                   -ReadLocation(py,DPWin->Width/fontwidth-3,xp.HorizPot)*fontwidth,0L);
  42. }
  43.  
  44. void puzdisplay()
  45. {
  46.   BOOL fix_window;
  47.  
  48.   fix_window=FALSE;
  49.  
  50.       switch( Msg.Class )
  51.       {
  52.         case MOUSEMOVE:
  53.                fix_window=TRUE;
  54.                break;
  55.  
  56.         case NEWSIZE:
  57.            if(rot<5)
  58.            {
  59.                    ModifyProp(&y,DPWin,NULL,yp.Flags,0,yp.VertPot,0,
  60.                  (ULONG) SetSize(py,DPWin->Height/fontheight-3));
  61.                    ModifyProp(&x,DPWin,NULL,xp.Flags,xp.HorizPot,0,
  62.                  (ULONG) SetSize(px,DPWin->Width/fontwidth-3),0);
  63.            }
  64.            else
  65.            {
  66.                    ModifyProp(&y,DPWin,NULL,yp.Flags,0,yp.VertPot,0,
  67.                  (ULONG) SetSize(px,DPWin->Height/fontheight-3));
  68.                    ModifyProp(&x,DPWin,NULL,xp.Flags,xp.HorizPot,0,
  69.                  (ULONG) SetSize(py,DPWin->Width/fontwidth-3),0);
  70.            }
  71.            UpdateDisplay();
  72.                break;
  73.  
  74.         case GADGETDOWN:
  75.                fix_window=TRUE;
  76.                break;
  77.  
  78.         case GADGETUP:
  79.                fix_window=TRUE;
  80.                break;
  81.  
  82.         case REFRESHWINDOW:
  83.                 BeginRefresh(DPWin);
  84.         if(rot<5)
  85.                   PrintIText(DPRP,IText,
  86.                       -ReadLocation(px,DPWin->Width/fontwidth-3,xp.HorizPot)*FONTWIDTH,0L);
  87.         else
  88.                   PrintIText(DPRP,IText,
  89.                       -ReadLocation(py,DPWin->Width/fontwidth-3,xp.HorizPot)*FONTWIDTH,0L);
  90.                 EndRefresh(DPWin,0);
  91.                 break;
  92.       }
  93.  
  94.     if(fix_window)
  95.     {
  96.       fix_window=FALSE;
  97.  
  98.         SetDrMd(DPRP,JAM1);
  99.         SetAPen(DPRP,0);
  100.         RectFill(DPRP,0,0,DPWin->Width,DPWin->Height);
  101.     UpdateDisplay();
  102.     }
  103. }
  104.  
  105. void wordlist()
  106. {
  107. BOOL fix_window;
  108.  
  109. int yoff,i;
  110.  
  111.    fix_window=FALSE;
  112.  
  113.      switch( Msg.Class )
  114.       {
  115.         case MOUSEMOVE:
  116.                fix_window=TRUE;
  117.            LWActive = FALSE;
  118.                break;
  119.  
  120.         case NEWSIZE:
  121.                ModifyProp(&z,WLWin,NULL,zp.Flags,0,zp.VertPot,0,
  122.                  (ULONG) SetSize(MAXWORD,WLWin->Height/(FONTHEIGHT+2)-3));
  123.                RefreshGadgets(&Words[0],WLWin,0);
  124.                break;
  125.  
  126.         case GADGETDOWN:
  127.                if(((struct Gadget *)Msg.IAddress)->GadgetID == 0)
  128.            {
  129.                     fix_window=TRUE;
  130.             LWActive = FALSE;
  131.            }        
  132.                else
  133.            {
  134.                     LastWord = (struct Gadget *)Msg.IAddress;
  135.                    LWActive = TRUE;
  136.            }
  137.            break;
  138.  
  139.         case GADGETUP:
  140.                if(((struct Gadget *)Msg.IAddress)->GadgetID == 0)
  141.            {
  142.                     fix_window=TRUE;
  143.             LWActive = FALSE;
  144.            }
  145.            else if(LastWord->NextGadget!=NULL)
  146.                 {
  147.                     LastWord=LastWord->NextGadget;
  148.                     ActivateGadget(LastWord,WLWin,NULL);
  149.             LWActive = TRUE;
  150.                 }
  151.                break;
  152.  
  153.         case REFRESHWINDOW:
  154.                 BeginRefresh(WLWin);
  155.                 RefreshGadgets(&Words[0],WLWin,0);
  156.                 EndRefresh(WLWin,0);
  157.                 break;
  158.       }
  159.  
  160.     if(fix_window)
  161.     {
  162.       fix_window=FALSE;
  163.     yoff = ReadLocation(MAXWORD,WLWin->Height/(FONTHEIGHT+2)-3,zp.VertPot)*(FONTHEIGHT+2);
  164.         for(i=0;i<MAXWORD;i++)
  165.             Words[i].TopEdge = i*(FONTHEIGHT+2) - yoff;
  166.         SetDrMd(WLRP,JAM1);
  167.         SetAPen(WLRP,0);
  168.         RectFill(WLRP,0,0,WLWin->Width,WLWin->Height);
  169.  
  170.         RefreshGadgets(&Words[0],WLWin,0);
  171.     }
  172. }
  173.  
  174. void menuctrl()
  175. {
  176.     USHORT menu_number;
  177.     struct MenuItem *item;
  178.     UBYTE m,mi,si;
  179.     BOOL fix_puz,fix_list;
  180.     int i,j;
  181.  
  182.         fix_puz = FALSE;
  183.         fix_list = FALSE;
  184.  
  185.         menu_number = Msg.Code;
  186.  
  187.         while( menu_number != MENUNULL )
  188.         {
  189.           item = (struct MenuItem *) ItemAddress( TheMenu, menu_number );
  190.  
  191.           m = MENUNUM(menu_number);
  192.           mi = ITEMNUM(menu_number);
  193.           si = SUBNUM(menu_number);
  194.           if(m==0 && mi==0)
  195.            {
  196.             file[0] = 0;
  197.             for(i=0;i<MAXWORD;i++)
  198.                 word[i][0] = 0;
  199.             NewKey();
  200.             NewPuzzle();
  201.             fix_puz = TRUE;
  202.             fix_list = TRUE;
  203.            }
  204.           else if(m==0 && mi==1)
  205.            {
  206.             if(loadfile()==TRUE)
  207.              {
  208.                 fix_puz = TRUE;
  209.                 fix_list = TRUE;
  210.              }
  211.            }
  212.           else if(m==0 && mi==2)
  213.             savefile();
  214.           else if(m==0 && mi==3)
  215.             saveasfile();
  216.           else if(m==0 && mi==4 && si==0)
  217.             printlist();
  218.           else if(m==0 && mi==4 && si==1)
  219.             printpuz();
  220.           else if(m==1 && mi==1 && si==0)
  221.            {
  222.             NewKey();
  223.             NewPuzzle();
  224.             fix_puz = TRUE;
  225.            }
  226.           else if(m==1 && mi==0)
  227.            {
  228.             if(Dimensions()==TRUE)
  229.             {
  230.                 NewKey();
  231.                 NewPuzzle();
  232.                 fix_puz = TRUE;
  233.             }
  234.            }
  235.           else if(m==1 && mi==1 && si==1)
  236.            {
  237.             NewPuzzle();
  238.             fix_puz = TRUE;
  239.            }
  240.       else if(m==1 && mi==1 && si==2)
  241.       {
  242.         LINK = (M1I1[2].Flags&CHECKED)/CHECKED;
  243.       }
  244.       else if(m==1 && mi==2)
  245.            {
  246.             filter = 0;
  247.             for(i=0;i<8;i++)
  248.                 if((M1I2[i].Flags&CHECKED)!=0)
  249.                     filter = filter|(1<<i);
  250.             if(filter==0)
  251.                 filter = 255;
  252.            }
  253.           else if(m==2 && mi==0)
  254.            {
  255.             DispKey = TRUE;
  256.             fix_puz = TRUE;
  257.            }
  258.           else if(m==2 && mi==1)
  259.            {
  260.             DispKey = FALSE;
  261.             fix_puz = TRUE;
  262.            }
  263.           else if(m==2 && mi==2)
  264.            {
  265.             rot = 0;
  266.             for(i = 0;i<8;i++)
  267.                 if((M2I2[i].Flags&CHECKED)!=0)
  268.                     rot = i + 1;
  269.             if(rot==0)
  270.                 rot = 1;
  271.             fix_puz = TRUE;
  272.            }
  273.           else if(m==3 && mi==0 && LWActive==TRUE)
  274.       {
  275.             strncpy(copy,((struct StringInfo *)LastWord->SpecialInfo)->Buffer,MAXSIZE+1);
  276.         fix_list = TRUE;
  277.       }
  278.           else if(m==3 && mi==1 && LWActive==TRUE)
  279.        {
  280.             strncpy(((struct StringInfo *)LastWord->SpecialInfo)->Buffer,copy,MAXSIZE+1);
  281.         fix_list = TRUE;
  282.        }
  283.           else if(m==3 && mi==2 && LWActive==TRUE)
  284.            {
  285.             j=(((struct StringInfo *)LastWord->SpecialInfo)->Buffer-word[0])/(MAXSIZE+1);
  286.             for(i=MAXWORD-2;i>=j;i--)
  287.                 strncpy(word[i+1],word[i],MAXSIZE+1);
  288.             word[j][0]=0;
  289.             fix_list = TRUE;
  290.            }
  291.           else if(m==3 && mi==3 && LWActive==TRUE)
  292.            {
  293.             i=(((struct StringInfo *)LastWord->SpecialInfo)->Buffer-word[0])/(MAXSIZE+1);
  294.             for(;i<MAXWORD-1;i++)
  295.                 strncpy(word[i],word[i+1],MAXSIZE+1);
  296.             word[MAXWORD-1][0] = 0;
  297.             fix_list = TRUE;
  298.            }
  299.           else if(m==3 && mi==4)
  300.        {
  301.             CleanUp();
  302.         fix_list = TRUE;
  303.        }
  304.           else if(m==3 && mi==5)
  305.        {
  306.             UpperCase();
  307.         fix_list = TRUE;
  308.        }
  309.           else if(m==3 && mi==6)
  310.        {
  311.             Sort();
  312.         fix_list = TRUE;
  313.        }
  314.  
  315.           if(fix_list)
  316.            {
  317.             fix_list=FALSE;
  318.             Msg.Class = NEWSIZE;
  319.             wordlist();
  320.         if(LWActive) ActivateGadget(LastWord,WLWin,NULL);
  321.            }
  322.           if(fix_puz)
  323.            {
  324.             fix_puz=FALSE;
  325.             NewDisplay();
  326.             Msg.Class = GADGETUP;/* instead of NEWSIZE so window cleared*/
  327.             puzdisplay();
  328.             Msg.Class = NEWSIZE;/* but forgot props might need adjusting*/
  329.             puzdisplay();
  330.            }
  331.            menu_number = item->NextSelect;
  332.         }
  333. }
  334.